import qiniuTool from './comp/qiniuTool.js'
import express from 'express'
import ResJson from './comp/ResJson.js'
import variable from './comp/variable.js'
// 访问密码,, 设置为undefined则跳过密码验证,
var password = variable.password

var app = express();

// 跨越配置
app.all("*",function(req,res,next){
    //设置允许跨域的域名，*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin","*");
    //允许的header类型
    res.header("Access-Control-Allow-Headers","content-type");
    //跨域允许的请求方式 
    res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
    if (req.method.toLowerCase() == 'options')
        res.send(200);  //让options尝试请求快速结束
    else
        next();
})


app.all('/*', function (req, res, next) {
    let paths = ["/uploadToken", "/delectFile"] // 需要密码验证的url
    // url是否在数组中
    if (paths.includes(req.path)) {
        // 验证密码
        if (typeof password == 'undefined' || (req.query && req.query.p && req.query.p === '1211')) {
            // 放行
            next()
        } else {
            // 返回错误
            res.send(ResJson(502, '密码不正确'))
        }
    }else{
        next()
    }
})


// 页面资源
app.use('/', express.static('dist'));
// 存活检测
app.get('/api/PING', async function (req, res) {
    res.send(ResJson(200, 'success', new Date().getTime()))
})
// 获取上传凭证
app.get('/uploadToken', function (req, res) {
    res.send(ResJson(200, '成功', {
        uploadToken: qiniuTool.getToken()
    }))
})
// 获取上传凭证, 此接口必须设置密码，否则会非常不安全
app.get('/delectFile', function (req, res) {
    // 此接口必须设置密码，否则会非常不安全
    if(typeof password == 'undefined'){
        res.send(ResJson(444, '由于安全问题，暂不开放删除功能，如需删除请将资源链接发至邮箱i@e.yyzhu.vip'))
        return
    }
    if (req.query.key && req.query.key != '') {
        qiniuTool.delFile(req.query.key).then((data) => {
            // 文件已不存在错误
            if(data.code == 612){
                res.send(ResJson(444, '文件已不存在'))
                return
            }
            // 其他错误
            if(data.code != 200){
                res.send(ResJson(444, data.error))
                return
            }
            // 成功
            res.send(ResJson(200, '成功'))
        }).catch((res) => {
            res.send(ResJson(444, '失败'))
        })
    }else{
        res.send(ResJson(444, '参数不完整'))
    }
})


var server = app.listen(9003, function () {
    var host = server.address().address
    var port = server.address().port
    console.log("Node.JS 服务器已启动，访问地址： http://%s:%s", host, port)
})